home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / stdwin / Gen / wdrawpar.c < prev    next >
Text File  |  1995-12-21  |  2KB  |  78 lines

  1. /* STDWIN -- PARAGRAPH DRAWING OPERATIONS.
  2.    N.B. This is portable to other implementations of stdwin. */
  3.  
  4. #include "stdwin.h"
  5. #include "tools.h"
  6.  
  7. /* Draw a paragraph of text.
  8.    An EOL forces a new line, otherwise lines are broken at spaces
  9.    (if at all possible).
  10.    Parameters are the top left corner, the width, the text and its length.
  11.    Return value is the v coordinate of the bottom line.
  12.    (Note that an empty string is drawn as one blank line.) */
  13.  
  14. int
  15. wdrawpar(left, top, text, width)
  16.     int left, top;
  17.     char *text;
  18.     int width;
  19. {
  20.     return _wdrawpar(left, top, text, width, TRUE);
  21. }
  22.  
  23. /* Measure the height of a paragraph of text, when drawn with wdrawpar. */
  24.  
  25. int
  26. wparheight(text, width)
  27.     char *text;
  28.     int width;
  29. {
  30.     return _wdrawpar(0, 0, text, width, FALSE);
  31. }
  32.  
  33. /* Routine to do the dirty work for the above two. */
  34.  
  35. static int
  36. _wdrawpar(left, top, text, width, draw)
  37.     int left, top;
  38.     char *text;
  39.     int width;
  40.     bool draw;
  41. {
  42.     int len= strlen(text);
  43.     int len1= 0; /* Len1 counts characters until next EOL */
  44.     
  45.     while (len1 < len && text[len1] != EOL)
  46.         ++len1;
  47.     for (;;) {
  48.         int n= wtextbreak(text, len1, width);
  49.         if (n < len1) {
  50.             char *cp= text+n;
  51.             while (cp > text && *cp != ' ')
  52.                 --cp;
  53.             if (cp > text)
  54.                 n= cp-text;
  55.         }
  56.         if (draw)
  57.             (void) wdrawtext(left, top, text, n);
  58.         top += wlineheight();
  59.         text += n;
  60.         len -= n;
  61.         len1 -= n;
  62.         while (len1 > 0 && *text == ' ') {
  63.             ++text;
  64.             --len;
  65.             --len1;
  66.         }
  67.         if (len1 == 0) {
  68.             if (len == 0)
  69.                 break;
  70.             ++text;
  71.             --len;
  72.             while (len1 < len && text[len1] != EOL)
  73.                 ++len1;
  74.         }
  75.     }
  76.     return top;
  77. }
  78.